Overview

Summary

About this Document

This document is stand-alone interactive dashboard viewable from most modern Internet browsers. The dashboard is meant to be a high-level summary of an rFreight scenario. All of the data, charts, and maps viewable in this dashboard are embedded directly into the HTML file, so users are encouraged to share their scenario results with others via this document. An Internet connection is necessary for the best user experience, but is not required.

Users may navigate to different areas of the dashboard using the navigation bar at the top of the page, and may interact directly with most tables, charts, and maps.

This document is best viewed using the most recent versions of the following web browsers:

Highlights

Run Date

2017-04-27

Tables

Tonnage

Value

Tonmiles

Tables by commodity

Tonnage Table

Tonnage

Value

Ton-miles

Total Flow Chart

Domestic Bar Charts

Domestic Flows Tonnage

Domestic Flows Value

Domestic Flows Ton-miles

National Bar Charts

International Flows Tonnage

International Flows Value

International Flows Ton-miles

Commodity Flow Charts

Domestic Commodity Flow Tonnage

Tonnage In

Value In

Ton-miles In

Domestic Commodity Flow Value

Tonnage Out

Value Out

Ton-miles Out

Domestic Commodity Flow Tonmiles

Tonnage Within

Value Within

Ton-miles Within

Regional Flow Chart

Flows

Tonnage

Value

Ton-miles

Tables

Summary Tables

Value

Tonmiles

Tables by Commodity

Tonnage Table

Tonnage

Value

Ton-miles

Total Flow Chart

Domestic Flows

Domestic Flows Tonnage

Domestic Flows Value

Domestic Flows Ton-miles

International Flows

International Flows Tonnage

International Flows Value

International Flows Ton-miles

Commodity Flow Charts

Domestic Commodity Flow Tonnage

Commodity Flows Within Zones

Commodity Flows Between Zones

Domestic Commodity Flow Value

Commodity Flows Within Zones

Commodity Flows Between Zones

Domestic Commodity Flow Value

Commodity Flows Within Zones

Commodity Flows Between Zones

Regional Flow Chart

Flows

Tonnage

Value

Ton-miles

---
title: "CMAP Dashboard"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: scroll
    theme: yeti
    source_code: embed
    css: "CMAPDashboard.css"
---

```{r loadPackages,echo=FALSE}
loadPackages <- function (packages, lib = NULL, suppressMessages = TRUE, suppressWarnings = FALSE) 
{
    notinstalled <- packages[!packages %in% .packages(all.available = TRUE, 
        lib.loc = lib)]
    if (length(notinstalled) > 0) 
        install.packages(notinstalled, repos = "http://cran.r-project.org", 
            dependencies = TRUE, lib = lib)
    for (package in packages) {
        library.expression <- paste0("library(", package, ", lib = lib)")
        if (suppressMessages) 
            library.expression <- paste0("suppressMessages(", 
                library.expression, ")")
        if (suppressWarnings) 
            library.expression <- paste0("suppressWarnings(", 
                library.expression, ")")
        eval(parse(text = library.expression))
    }
    invisible(TRUE)
}

SYSTEM_REPORT_PKGS <- c("DT", "flexdashboard", "leaflet", "geojsonio", "htmltools", "htmlwidgets",
                        "knitr", "mapview", "plotly", "RColorBrewer", "rgdal", "rgeos",
                        "rmarkdown", "scales", "stringr", "jsonlite", "pander","RSGFAF","data.table","circlize","formattable")
SYSTEM_APP_PATH       <- getwd()

loadPackages(SYSTEM_REPORT_PKGS)

```

```{r Setup}
opts_knit$set(root.dir = SYSTEM_APP_PATH)
```


```{r Common_Values}
# Mapping of States to Regions & Subregions

stateRegion <- data.table(State = c("Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming","District of Columbia"),
                          Region = c("South","West","West","South","West","West","NorthEast","South","South","South","West","West","MidWest","MidWest","MidWest","MidWest","South","South","NorthEast","South","NorthEast","MidWest","MidWest","South","MidWest","West","MidWest","West","NorthEast","NorthEast","West","NorthEast","South","MidWest","MidWest","South","West","NorthEast","NorthEast","South","MidWest","South","South","West","NorthEast","South","West","South","MidWest","West","South"),
                          SubRegion=c("East South Central","Pacific","Mountain","West South Central","Pacific","Mountain","New England","South Atlantic","South Atlantic","South Atlantic","Pacific","Mountain","East North Central","East North Central","West North Central","West North Central","East South Central","West South Central","New England","South Atlantic","New England","East North Central","West North Central","East South Central","West North Central","Mountain","West North Central","Mountain","New England","Middle Atlantic","Mountain","Middle Atlantic","South Atlantic","West North Central","East North Central","West South Central","Pacific","Middle Atlantic","New England","South Atlantic","West North Central","East South Central","West South Central","Mountain","New England","South Atlantic","Pacific","South Atlantic","East North Central","Mountain","South Atlantic"),stringsAsFactors = FALSE, key = "State")

```

```{r ggplot_Theme}
theme_db <- theme_bw() + theme(plot.margin = unit(c(10,10,20,10),"pt")) + theme(strip.background = element_rect(fill = "white")) # this should eventually be replaced with an RSG theme, which can be substituted for client themes in conjunction with the dashboard's css file in the YAML header
```



Overview
============================================

Summary {data-width=200}
--------------------------------------------

### About this Document

This document is stand-alone interactive dashboard viewable from most modern Internet browsers. The dashboard is meant to be a high-level summary of an __rFreight__ scenario. All of the data, charts, and maps viewable in this dashboard are embedded directly into the HTML file, so users are encouraged to share their scenario results with others via this document. An Internet connection is necessary for the best user experience, but is not required.

Users may navigate to different areas of the dashboard using the navigation bar at the top of the page, and may interact directly with most tables, charts, and maps.

This document is best viewed using the most recent versions of the following web browsers:

* [Google Chrome](https://www.google.com/chrome/browser/desktop/)
* [Mozilla Firefox](https://www.mozilla.org/en-US/firefox/new/)
* [Microsoft Internet Explorer](https://www.microsoft.com/en-us/download/internet-explorer.aspx)

Highlights {data-width=150}
--------------------------------------------

### Run Date

```{r Run_Date_ValueBox}
valueBox(Sys.Date(), "Model Run Date", icon = "fa-calendar")
```



```{r setupColors, echo=FALSE}
# Setup default colors at the beginning (WIP)
rsgcolordf <- data.frame(red=c(246,0,99,186,117,255,82), green=c(139,111,175,18,190,194,77), blue=c(31,161,94,34,233,14,133), colornames=c("orange","marine","leaf","cherry","sky","sunshine","violet"))

rsgcolordf <- rsgcolordf %>% mutate(hexValue=rgb(red,green,blue,maxColorValue=255))

makeMoreColors <- colorRampPalette(rsgcolordf$hexValue) # Combines RSG colors to form more colors

modeColors <- data.table(mode=c("Truck","Rail","Water","Air","Multiple","Pipeline","Other","None"),colors=makeMoreColors(8),stringsAsFactors = FALSE,key = "mode")

modeColors2 <- makeMoreColors(8)
names(modeColors2) <- c("Truck","Rail","Water","Air","Multiple","Pipeline","Other","None")

dataColor <- makeMoreColors(2)
names(dataColor) <- c("FAF 2012","Model")


```

```{r setVariables, echo=FALSE}
selectYear <- 2012 # For filtering years in future
CMAPFAFCodes <- c(171,181)
lbstoTons <- 0.0005 # Convert from lbs to tons
# Load MesoZone to FAF zone mapping
mesoFAFCBPMap <- fread("meso_faf_map.csv")
setkey(mesoFAFCBPMap,MESOZONE)
# Load mode mapping
modeCategories <- fread("mode_description.csv",stringsAsFactors = FALSE)
setkey(modeCategories,ModeNumber)
```


```{r loadData, echo=FALSE, warning=FALSE,include=FALSE}
# Load observed data and model data in this section

#####################################################################
######## Observed Data ##############################################
#####################################################################
Flows <- suppressWarnings(getFAFData(year = selectYear))
## Note: Observed that some tonmiles are 0 while tons are greater than 0.

Flows[Origin.Domestic==Destination.Domestic,Move.Type:="Within Zones"]
Flows[Origin.Domestic!=Destination.Domestic,Move.Type:="Between Zones"]

# Flows[,':='(Move.Type=ifelse(Origin.Domestic==Destination.Domestic,"Within Zones","Between Zones"))]

Flows[,':='(Origin.Region=stateRegion[.(Origin.State),Region],
            Origin.SubRegion=stateRegion[.(Origin.State),SubRegion],
            Destination.Region=stateRegion[.(Destination.State),Region],
            Destination.SubRegion=stateRegion[.(Destination.State),SubRegion])]

CMAPFlows <- Flows[Origin.Domestic %in% CMAPFAFCodes | Destination.Domestic %in% CMAPFAFCodes]

CMAPFlows[Origin.Domestic %in% CMAPFAFCodes & Destination.Domestic %in% CMAPFAFCodes,Move.Type:="Within"]
CMAPFlows[Origin.Domestic %in% CMAPFAFCodes & !(Destination.Domestic %in% CMAPFAFCodes), Move.Type:="Out"]
CMAPFlows[!(Origin.Domestic %in% CMAPFAFCodes) & Destination.Domestic %in% CMAPFAFCodes, Move.Type:="In"]

# CMAPFlows[,':='(Move.Type=ifelse(Origin.Domestic %in% CMAPFAFCodes & Destination.Domestic %in% CMAPFAFCodes,"Within",ifelse(Origin.Domestic %in% CMAPFAFCodes, "Out","In")))]

CMAPFlows[Origin.Domestic %in% CMAPFAFCodes, Origin.Region:="CMAP"]
CMAPFlows[Origin.Domestic %in% CMAPFAFCodes, Origin.SubRegion:="CMAP"]
CMAPFlows[Destination.Domestic %in% CMAPFAFCodes, Destination.Region:="CMAP"]
CMAPFlows[Destination.Domestic %in% CMAPFAFCodes, Destination.SubRegion:="CMAP"]

# CMAPFlows[,':='(Origin.Region=ifelse(Origin.Domestic %in% CMAPFAFCodes,"CMAP",Origin.Region),
#                 Origin.SubRegion=ifelse(Origin.Domestic %in% CMAPFAFCodes,"CMAP",Origin.SubRegion),
#                 Destination.Region=ifelse(Destination.Domestic %in% CMAPFAFCodes,"CMAP",Destination.Region),
#                 Destination.SubRegion=ifelse(Destination.Domestic %in% CMAPFAFCodes,"CMAP",Destination.SubRegion))]

#####################################################################
######## Model Data ##############################################
#####################################################################
FAFZonescurrentVersion <- FAFZones[Version==getLatestFAFVersion()]
FAFZonescurrentVersion[,Version:=NULL]
FAFZonescurrentVersion[,State:=as.character(State)]
setkey(FAFZonescurrentVersion,FAFZone)

file_location <- "../scenarios/base/old_outputs/pairs.Rdata"
# Check if it's an old file
isOld <- ifelse(grepl("old",file_location),TRUE,FALSE)

ModelFlows <- get(load(file_location))

# To match the with the older version
# if(isOld){setnames(ModelFlows,old=c("pzone","czone","SCTG"),new = c("Production_zone","Consumption_zone","Commodity_SCTG"))}

# rm(pairs)
# gcgit ()


ModelFlows[, Tons := Last.Iteration.Quantity * lbstoTons]
ModelFlows[, Tonmiles := Tons * Distance]
ModelFlows[, Value := Last.Iteration.Quantity * ConVal / PurchaseAmountTons]
ModelFlows[Production_zone <= 273 & Consumption_zone <= 273, Trade.Type := "Domestic"]
ModelFlows[Production_zone > 273 & Consumption_zone <= 273, Trade.Type := "Import"]
ModelFlows[Production_zone <= 273 & Consumption_zone > 273, Trade.Type := "Export"]



# Assign FAF zones to origin and destination

ModelFlows[Trade.Type!="Import",Origin.Domestic:=mesoFAFCBPMap[.(Production_zone),FAFZONE]]
ModelFlows[Trade.Type=="Import",Origin.Foreign:=mesoFAFCBPMap[.(Production_zone),FAFZONE]]
ModelFlows[Trade.Type!="Export",Destination.Domestic:=mesoFAFCBPMap[.(Consumption_zone),FAFZONE]]
ModelFlows[Trade.Type=="Export",Destination.Foreign:=mesoFAFCBPMap[.(Consumption_zone),FAFZONE]]

# ModelFlows[,":="(Origin.Domestic=ifelse(Trade.Type!="Import",mesoFAFCBPMap[.(Production_zone),FAFZONE],NA),
#             Origin.Foreign=ifelse(Trade.Type=="Import",mesoFAFCBPMap[.(Production_zone),FAFZONE],NA),
#             Destination.Domestic=ifelse(Trade.Type!="Export",mesoFAFCBPMap[.(Consumption_zone),FAFZONE],NA),
#             Destination.Foreign=ifelse(Trade.Type=="Export",mesoFAFCBPMap[.(Consumption_zone),FAFZONE],NA))]

##############################################################
# Assign states to origin and destination
##############################################################

ModelFlows[Trade.Type!="Import",Origin.State:=FAFZonescurrentVersion[.(Origin.Domestic),State]]
ModelFlows[Trade.Type!="Export",Destination.State:=FAFZonescurrentVersion[.(Destination.Domestic),State]]


# ModelFlows[,":="(Origin.State=ifelse(Trade.Type!="Import",FAFZonescurrentVersion[.(Origin.Domestic),State],NA),Destination.State=ifelse(Trade.Type!="Export",FAFZonescurrentVersion[.(Destination.Domestic),State],NA))]



ModelFlows[,':='(Origin.Region=stateRegion[.(Origin.State),Region],
            Origin.SubRegion=stateRegion[.(Origin.State),SubRegion],
            Destination.Region=stateRegion[.(Destination.State),Region],
            Destination.SubRegion=stateRegion[.(Destination.State),SubRegion])]

ModelFlows[Trade.Type=="Domestic",Mode.Domestic:=modeCategories[.(MinPath),Mode]]

# ModelFlows[,Mode.Domestic:=ifelse(Trade.Type=="Domestic",modeCategories[.(MinPath),Mode],NA)]

ModelCMAPFlows <- ModelFlows[Origin.Domestic %in% CMAPFAFCodes | Destination.Domestic %in% CMAPFAFCodes]

ModelCMAPFlows[Origin.Domestic %in% CMAPFAFCodes & Destination.Domestic %in% CMAPFAFCodes,Move.Type:="Within"]
ModelCMAPFlows[Origin.Domestic %in% CMAPFAFCodes & !(Destination.Domestic %in% CMAPFAFCodes), Move.Type:="Out"]
ModelCMAPFlows[!(Origin.Domestic %in% CMAPFAFCodes) & Destination.Domestic %in% CMAPFAFCodes, Move.Type:="In"]

# ModelCMAPFlows[,':='(Move.Type=ifelse(Origin.Domestic %in% CMAPFAFCodes & Destination.Domestic %in% CMAPFAFCodes,"Within",ifelse(Origin.Domestic %in% CMAPFAFCodes, "Out","In")))]

ModelFlows[Origin.Domestic==Destination.Domestic,Move.Type:="Within Zones"]
ModelFlows[Origin.Domestic!=Destination.Domestic,Move.Type:="Between Zones"]

# ModelFlows[,':='(Move.Type=ifelse(Origin.Domestic==Destination.Domestic,"Within Zones","Between Zones"))]

ModelCMAPFlows[Origin.Domestic %in% CMAPFAFCodes, Origin.Region:="CMAP"]
ModelCMAPFlows[Origin.Domestic %in% CMAPFAFCodes, Origin.SubRegion:="CMAP"]
ModelCMAPFlows[Destination.Domestic %in% CMAPFAFCodes, Destination.Region:="CMAP"]
ModelCMAPFlows[Destination.Domestic %in% CMAPFAFCodes, Destination.SubRegion:="CMAP"]


# ModelCMAPFlows[,':='(Origin.Region=ifelse(Origin.Domestic %in% CMAPFAFCodes,"CMAP",Origin.Region),
#                 Origin.SubRegion=ifelse(Origin.Domestic %in% CMAPFAFCodes,"CMAP",Origin.SubRegion),
#                 Destination.Region=ifelse(Destination.Domestic %in% CMAPFAFCodes,"CMAP",Destination.Region),
#                 Destination.SubRegion=ifelse(Destination.Domestic %in% CMAPFAFCodes,"CMAP",Destination.SubRegion))]




```


Tables {data-navmenu="CMAP" data-width=200 .tabset .tabset-fade}
==================================================================

### Tonnage
```{r createTablesCMAP, echo=FALSE}
DomesticCMAPFlows <- CMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Move.Type,Mode.Domestic)]

ModelDomesticCMAPFlows <- ModelCMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Move.Type,Mode.Domestic)]

DomesticCMAPFlows <- rbind(DomesticCMAPFlows,ModelDomesticCMAPFlows)
rm(ModelDomesticCMAPFlows)

DomesticCMAPFlows.T <- dcast(DomesticCMAPFlows,Mode.Domestic~Move.Type+Table,value.var = "Tonnage")
DomesticCMAPFlows.V <- dcast(DomesticCMAPFlows,Mode.Domestic~Move.Type+Table,value.var = "Value")
DomesticCMAPFlows.TM <- dcast(DomesticCMAPFlows,Mode.Domestic~Move.Type+Table,value.var = "Tonmiles")


ImpExpDomesticCMAPFlows <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Domestic)]

###########################################################
#### Commented out until the foreign and domestic modes are decided
###########################################################

# ModelImpExpDomesticCMAPFlows <- ModelCMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Trade.Type,Move.Type,Mode.Domestic)][order(Trade.Type,Move.Type,-Tonnage)]
# 
# ImpExpDomesticCMAPFlows <- rbind(ImpExpDomesticCMAPFlows,ModelImpExpDomesticCMAPFlows)
# rm(ModelImpExpDomesticCMAPFlows)

ImpExpDomesticCMAPFlows.T <- dcast(ImpExpDomesticCMAPFlows,Mode.Domestic~Trade.Type+Move.Type,value.var="Tonnage")
ImpExpDomesticCMAPFlows.V <- dcast(ImpExpDomesticCMAPFlows,Mode.Domestic~Trade.Type+Move.Type,value.var="Value")
ImpExpDomesticCMAPFlows.TM <- dcast(ImpExpDomesticCMAPFlows,Mode.Domestic~Trade.Type+Move.Type,value.var="Tonmiles")

ImpExpInternationalCMAPFlows <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Foreign)]

###########################################################
#### Commented out until the foreign and domestic modes are decided
###########################################################

# ModelImpExpDomesticCMAPFlows <- ModelCMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Trade.Type,Move.Type,Mode.Foreign)][order(Trade.Type,Move.Type,-Tonnage)]
# 
# ImpExpDomesticCMAPFlows <- rbind(ImpExpDomesticCMAPFlows,ModelImpExpDomesticCMAPFlows)
# rm(ModelImpExpDomesticCMAPFlows)

ImpExpInternationalCMAPFlows.T <- dcast(ImpExpInternationalCMAPFlows,Mode.Foreign~Trade.Type+Move.Type,value.var="Tonnage")
ImpExpInternationalCMAPFlows.V <- dcast(ImpExpInternationalCMAPFlows,Mode.Foreign~Trade.Type+Move.Type,value.var="Value")
ImpExpInternationalCMAPFlows.TM <- dcast(ImpExpInternationalCMAPFlows,Mode.Foreign~Trade.Type+Move.Type,value.var="Tonmiles")

TotalFlowsCMAP.T <- merge(merge(DomesticCMAPFlows.T,ImpExpDomesticCMAPFlows.T,by="Mode.Domestic"),ImpExpInternationalCMAPFlows.T,by.x="Mode.Domestic",by.y="Mode.Foreign")
TotalFlowsCMAP.V <- merge(merge(DomesticCMAPFlows.V,ImpExpDomesticCMAPFlows.V,by="Mode.Domestic"),ImpExpInternationalCMAPFlows.V,by.x="Mode.Domestic",by.y="Mode.Foreign")
TotalFlowsCMAP.TM <- merge(merge(DomesticCMAPFlows.TM,ImpExpDomesticCMAPFlows.TM,by="Mode.Domestic"),ImpExpInternationalCMAPFlows.TM,by.x="Mode.Domestic",by.y="Mode.Foreign")


countDomestic <- DomesticCMAPFlows[,.N,by=.(Move.Type,Table)]
countInternationalDomestic <- ImpExpDomesticCMAPFlows[,.N,by=.(Move.Type,Trade.Type,Table)]
countInternationalInternational <- ImpExpInternationalCMAPFlows[,.N,by=.(Move.Type,Trade.Type,Table)]

sketchCMAP <- with(tags,table(
    thead(
        tr(
            th(colspan=1,rowspan=4,"Mode"),
            th(colspan=countDomestic[,.N],rowspan=2, "Domesitc"),
            th(colspan=countInternationalDomestic[,.N], "Domestic"),
            th(colspan=countInternationalInternational[,.N], "International")
          ),
        tr(
            th(colspan=countInternationalDomestic[Trade.Type=="Import",.N], "Import"),
            th(colspan=countInternationalDomestic[Trade.Type=="Export",.N], "Export"),
            th(colspan=countInternationalInternational[Trade.Type=="Import",.N], "Import"),
            th(colspan=countInternationalInternational[Trade.Type=="Export",.N], "Export")
        ),
        tr(
            if((value <- countDomestic[Move.Type=="In",.N])>0) th(colspan=value, "In"),
            if((value <- countDomestic[Move.Type=="Out",.N])>0) th(colspan=value, "Out"),
            if((value <- countDomestic[Move.Type=="Within",.N])>0) th(colspan=value, "Within"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="In",.N])>0) th(colspan=value, "In"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Out",.N])>0) th(colspan=value, "Out"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Within",.N])>0) th(colspan=value, "Within"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="In",.N])>0) th(colspan=value, "In"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Out",.N])>0) th(colspan=value, "Out"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Within",.N])>0) th(colspan=value, "Within"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="In",.N])>0) th(colspan=value, "In"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Out",.N])>0) th(colspan=value, "Out"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Within",.N])>0) th(colspan=value, "Within"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="In",.N])>0) th(colspan=value, "In"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Out",.N])>0) th(colspan=value, "Out"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Within",.N])>0) th(colspan=value, "Within")
        ),
        tr(
          if((value <- countDomestic[Move.Type=="In" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countDomestic[Move.Type=="In" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countDomestic[Move.Type=="Out" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countDomestic[Move.Type=="Out" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countDomestic[Move.Type=="Within" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countDomestic[Move.Type=="Within" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="In" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="In" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Out" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Out" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Within" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Within" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="In" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="In" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Out" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Out" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Within" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Within" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="In" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="In" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Out" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Out" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Within" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Within" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="In" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="In" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Out" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Out" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Within" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Within" & Table=="Model",.N])>0) th(colspan=value, "Model")
        )
        )))


# Function to create css style colors
createCSSColors <- function(x,min.color,max.color,...){
  clrs <- gradient(x,min.color,max.color,...)
  clrs <- paste("rgb(",apply(t(clrs),1,paste,collapse=","),")",sep="")
  return(clrs)
}

datatable(TotalFlowsCMAP.T,container=sketchCMAP,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(TotalFlowsCMAP.T),currency="",digits=0) %>% formatStyle(columns=2:ncol(TotalFlowsCMAP.T),backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,2:ncol(TotalFlowsCMAP.T)]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,2:ncol(TotalFlowsCMAP.T)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")# %>% formatStyle(columns=5:10,backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,5:10]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,5:10])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") %>% formatStyle(columns=11:16,backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,11:16]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,11:16])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")



```


### Value

```{r,echo=FALSE}
datatable(TotalFlowsCMAP.V,container=sketchCMAP,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(TotalFlowsCMAP.V),digits=0) %>% formatStyle(columns=2:ncol(TotalFlowsCMAP.V),backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,2:ncol(TotalFlowsCMAP.V)]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,2:ncol(TotalFlowsCMAP.V)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")# %>% formatStyle(columns=5:10,backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,5:10]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,5:10])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") %>% formatStyle(columns=11:16,backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,11:16]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,11:16])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```


### Tonmiles

```{r,echo=FALSE}
datatable(TotalFlowsCMAP.TM,container=sketchCMAP,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(TotalFlowsCMAP.TM),currency="",digits=0) %>% formatStyle(columns=2:ncol(TotalFlowsCMAP.TM),backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,2:ncol(TotalFlowsCMAP.TM)]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,2:ncol(TotalFlowsCMAP.TM)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")# %>% formatStyle(columns=5:10,backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,5:10]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,5:10])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") %>% formatStyle(columns=11:16,backgroundColor=styleInterval(sort(unlist(TotalFlowsCMAP.T[,11:16]))[-1],createCSSColors(sort(unlist(TotalFlowsCMAP.T[,11:16])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```


Tables by commodity {data-navmenu="CMAP" data-orientation=rows}
==================================================

Tonnage Table {data-height=1600 .tabset .tabset-fade}
-------------------------------------------------
### Tonnage
```{r createTablesCMAPCommodity, echo=FALSE}

# Domestic Portion
DomesticCMAPCommodityFlows <- CMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Move.Type,Mode.Domestic,SCTG)][order(Move.Type,-Tonnage)]

DomesticCMAPCommodityFlowsTotal <- CMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Move.Type="Total",Table="FAF 2012"),by=.(Mode.Domestic,SCTG)][order(Move.Type,-Tonnage)]

DomesticCMAPCommodityFlows <- rbind(DomesticCMAPCommodityFlows,DomesticCMAPCommodityFlowsTotal)
rm(DomesticCMAPCommodityFlowsTotal)

ModelDomesticCMAPCommodityFlows <- ModelCMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Move.Type,Mode.Domestic,Commodity_SCTG)][order(Move.Type,-Tonnage)]

ModelDomesticCMAPCommodityFlowsTotal <- ModelCMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Move.Type="Total",Table="Model"),by=.(Mode.Domestic,Commodity_SCTG)][order(Move.Type,-Tonnage)]

ModelDomesticCMAPCommodityFlows <- rbind(ModelDomesticCMAPCommodityFlows,ModelDomesticCMAPCommodityFlowsTotal)
rm(ModelDomesticCMAPCommodityFlowsTotal)

setnames(ModelDomesticCMAPCommodityFlows,old="Commodity_SCTG",new="SCTG")
DomesticCMAPCommodityFlows <- rbind(DomesticCMAPCommodityFlows,ModelDomesticCMAPCommodityFlows)
rm(ModelDomesticCMAPCommodityFlows)

DomesticCMAPCommodityFlows.T <- dcast(DomesticCMAPCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Move.Type+Table,value.var = "Tonnage")
DomesticCMAPCommodityFlows.V <- dcast(DomesticCMAPCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Move.Type+Table,value.var = "Value")
DomesticCMAPCommodityFlows.TM <- dcast(DomesticCMAPCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Move.Type+Table,value.var = "Tonmiles")

# Domestic Portion of International Trade
ImpExpDomesticCMAPCommodityFlows <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Domestic,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpDomesticCMAPCommodityFlowsTotal <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012",Move.Type="Total"),by=.(Trade.Type,Mode.Domestic,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpDomesticCMAPCommodityFlows <- rbind(ImpExpDomesticCMAPCommodityFlows,ImpExpDomesticCMAPCommodityFlowsTotal)
rm(ImpExpDomesticCMAPCommodityFlowsTotal)

ImpExpDomesticCMAPCommodityFlows.T <- dcast(ImpExpDomesticCMAPCommodityFlows[Move.Type=="Total"],SCTG~Mode.Domestic+Table+Trade.Type+Move.Type,value.var = "Tonnage")
ImpExpDomesticCMAPCommodityFlows.V <- dcast(ImpExpDomesticCMAPCommodityFlows[Move.Type=="Total"],SCTG~Mode.Domestic+Table+Trade.Type+Move.Type,value.var = "Value")
ImpExpDomesticCMAPCommodityFlows.TM <- dcast(ImpExpDomesticCMAPCommodityFlows[Move.Type=="Total"],SCTG~Mode.Domestic+Table+Trade.Type+Move.Type,value.var = "Tonmiles")



# Foreign portion of International Trade
ImpExpInternationalCMAPCommodityFlows <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Foreign,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpInternationalCMAPCommodityFlowsTotal <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012",Move.Type="Total"),by=.(Trade.Type,Mode.Foreign,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpInternationalCMAPCommodityFlows <- rbind(ImpExpInternationalCMAPCommodityFlows,ImpExpInternationalCMAPCommodityFlowsTotal)
rm(ImpExpInternationalCMAPCommodityFlowsTotal)

ImpExpInternationalCMAPCommodityFlows.T <- dcast(ImpExpInternationalCMAPCommodityFlows[Move.Type=="Total"],SCTG~Mode.Foreign+Table+Trade.Type+Move.Type,value.var = "Tonnage")
ImpExpInternationalCMAPCommodityFlows.V <- dcast(ImpExpInternationalCMAPCommodityFlows[Move.Type=="Total"],SCTG~Mode.Foreign+Table+Trade.Type+Move.Type,value.var = "Value")
ImpExpInternationalCMAPCommodityFlows.TM <- dcast(ImpExpInternationalCMAPCommodityFlows[Move.Type=="Total"],SCTG~Mode.Foreign+Table+Trade.Type+Move.Type,value.var = "Tonmiles")








countMode <-  DomesticCMAPCommodityFlows[Move.Type!="Total",.N,by=.(Mode.Domestic,Move.Type,Table)]
sketchDomesticCMAPCommodity <- with(tags,table(
    thead(
        tr(
            th(colspan=1,rowspan=3,"SCTG"),
            if ((value <- countMode[Mode.Domestic=="Truck",.N]) > 0) th(colspan = value,"Truck"),
            if ((value <- countMode[Mode.Domestic=="Rail",.N]) > 0) th(colspan= value,"Rail"),
            if ((value <- countMode[Mode.Domestic=="Water",.N]) > 0) th(colspan= value,"Water"),
            if ((value <- countMode[Mode.Domestic=="Air",.N]) > 0) th(colspan= value,"Air"),
            if ((value <- countMode[Mode.Domestic=="Multiple",.N]) > 0) th(colspan= value,"Multiple"),
            if ((value <- countMode[Mode.Domestic=="Pipeline",.N]) > 0) th(colspan= value,"Pipeline")
          ),
        tr(
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="In",.N]) > 0) th(colspan=value,"In"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Out",.N]) > 0) th(colspan=value,"Out"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Within",.N]) > 0) th(colspan=value,"Within"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="In",.N]) > 0) th(colspan=value,"In"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Out",.N]) > 0) th(colspan=value,"Out"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Within",.N]) > 0) th(colspan=value,"Within"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="In",.N]) > 0) th(colspan=value,"In"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Out",.N]) > 0) th(colspan=value,"Out"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Within",.N]) > 0) th(colspan=value,"Within"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="In",.N]) > 0)th(colspan=value,"In"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Out",.N]) > 0)th(colspan=value,"Out"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Within",.N]) > 0)th(colspan=value,"Within"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="In",.N]) > 0) th(colspan=value,"In"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Out",.N]) > 0) th(colspan=value,"Out"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Within",.N]) > 0) th(colspan=value,"Within"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="In",.N]) > 0) th(colspan=value,"In"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Out",.N]) > 0) th(colspan=value,"Out"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Within",.N]) > 0) th(colspan=value,"Within")
        ),
        tr(
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="In"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="In"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Out"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Out"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Within"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Within"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="In"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="In"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Out"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Out"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Within"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Within"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="In"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="In"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Out"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Out"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Within"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Within"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="In"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="In"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Out"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Out"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Within"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Within"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="In"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="In"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Out"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Out"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Within"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Within"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="In"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="In"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Out"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Out"&Table=="Model",.N]) > 0) th(colspan=value,"Model"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Within"&Table=="FAF 2012",.N]) > 0) th(colspan=value,"FAF 2012"),
            if ((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Within"&Table=="Model",.N]) > 0) th(colspan=value,"Model")
        )
        )))

datatable(DomesticCMAPCommodityFlows.T,container=sketchDomesticCMAPCommodity,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(DomesticCMAPCommodityFlows.T),currency="",digits=0) %>% formatStyle(columns=2:ncol(DomesticCMAPCommodityFlows.T),backgroundColor=styleInterval(sort(unlist(DomesticCMAPCommodityFlows.T[,2:ncol(DomesticCMAPCommodityFlows.T)]))[-1],createCSSColors(sort(unlist(DomesticCMAPCommodityFlows.T[,2:ncol(DomesticCMAPCommodityFlows.T)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")

```


### Value

```{r,echo=FALSE}
datatable(DomesticCMAPCommodityFlows.V,container=sketchDomesticCMAPCommodity,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(DomesticCMAPCommodityFlows.V),digits=0) %>% formatStyle(columns=2:ncol(DomesticCMAPCommodityFlows.V),backgroundColor=styleInterval(sort(unlist(DomesticCMAPCommodityFlows.V[,2:ncol(DomesticCMAPCommodityFlows.V)]))[-1],createCSSColors(sort(unlist(DomesticCMAPCommodityFlows.V[,2:ncol(DomesticCMAPCommodityFlows.V)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```

### Ton-miles

```{r,echo=FALSE}
datatable(DomesticCMAPCommodityFlows.TM,container=sketchDomesticCMAPCommodity,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(DomesticCMAPCommodityFlows.TM),currency="",digits=0) %>% formatStyle(columns=2:ncol(DomesticCMAPCommodityFlows.TM),backgroundColor=styleInterval(sort(unlist(DomesticCMAPCommodityFlows.TM[,2:ncol(DomesticCMAPCommodityFlows.TM)]))[-1],createCSSColors(sort(unlist(DomesticCMAPCommodityFlows.TM[,2:ncol(DomesticCMAPCommodityFlows.TM)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```






Total Flow Chart {data-navmenu="CMAP" data-width=600}
============================================




























































Domestic Bar Charts
-----------------------------------

### Domestic Flows Tonnage

```{r comparisonPlotDomesticTonnage, echo=FALSE}

p <- DomesticCMAPFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonnage,fill=Table))+geom_bar(stat = "identity",position = "dodge")+labs(x="Mode",y="Tonnage")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+scale_fill_manual("",values=dataColor)

ggplotly(p)
```


### Domestic Flows Value

```{r comparisonPlotDomesticValue, echo=FALSE}

p <- DomesticCMAPFlows %>% ggplot(aes(x=Mode.Domestic,y=Value,fill=Table))+geom_bar(stat = "identity",position = "dodge")+labs(x="Mode",y="Value")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+scale_fill_manual("",values=dataColor)

ggplotly(p)
```

### Domestic Flows Ton-miles

```{r comparisonPlotDomesticTonmiles, echo=FALSE}

p <- DomesticCMAPFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonmiles,fill=Table))+geom_bar(stat = "identity",position = "dodge")+labs(x="Mode",y="Ton-miles")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+scale_fill_manual("",values=dataColor)

ggplotly(p)
```

National Bar Charts
-----------------------------------

### International Flows Tonnage

```{r comparisonPlotInternationalDomesticTonnage, echo=FALSE}
ImpExpDomesticCMAPFlows <- CMAPFlows[Trade.Type!="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0)),by=.(Move.Type,Mode.Domestic,Mode.Foreign)][order(Move.Type,-Tonnage)]

p <- ImpExpDomesticCMAPFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonnage,fill=Mode.Foreign))+geom_bar(stat = "identity")+labs(x="Domestic Mode",y="Tonnage")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+guides(fill=guide_legend("Foreign Mode"))+scale_fill_manual(values = modeColors2)+scale_y_continuous(position = "right")

ggplotly(p)
```

### International Flows Value

```{r comparisonPlotInternationalDomesticValue, echo=FALSE}

p <- ImpExpDomesticCMAPFlows %>% ggplot(aes(x=Mode.Domestic,y=Value,fill=Mode.Foreign))+geom_bar(stat = "identity")+labs(x="Domestic Mode",y="Value")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+guides(fill=guide_legend("Foreign Mode"))+scale_fill_manual(values = modeColors2)+scale_y_continuous(position = "right")

ggplotly(p)
```

### International Flows Ton-miles

```{r comparisonPlotInternationalDomesticTonmiles, echo=FALSE}

p <- ImpExpDomesticCMAPFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonmiles,fill=Mode.Foreign))+geom_bar(stat = "identity")+labs(x="Domestic Mode",y="Ton-miles")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+guides(fill=guide_legend("Foreign Mode"))+scale_fill_manual(values = modeColors2)+scale_y_continuous(position = "right")

ggplotly(p)
```


























Commodity Flow Charts {data-navmenu="CMAP" .tabset .tabset-fade}
===================================================================

Domestic Commodity Flow Tonnage {.tabset .tabset-fade}
----------------------------------------------------------------

### Tonnage In
```{r,echo=FALSE, include=FALSE}
# DomesticCMAPCommodityFlows <- CMAPFlows[Trade.Type=="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0)),by=.(SCTG,Mode.Domestic,Move.Type)][order(SCTG,Move.Type,Mode.Domestic)]

latestSCTGCodes <- SCTGCodes[Version==getLatestFAFVersion()]
latestSCTGCodes[,Version:=NULL]
setkey(latestSCTGCodes,SCTG)

DomesticCMAPCommodityFlows <- merge(DomesticCMAPCommodityFlows,latestSCTGCodes,by="SCTG",all.x=TRUE,all.y=FALSE)
DomesticCMAPCommodityFlows[,SCTGLabels:=paste(SCTG,Label)]

```

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="In"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Tonnage,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Tonnage",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```

### Value In

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="In"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Value,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Value",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```


### Ton-miles In

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="In"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Tonmiles,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Ton-miles",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```

Domestic Commodity Flow Value {.tabset .tabset-fade}
----------------------------------------------------------------

### Tonnage Out

```{r,echo=FALSE,fig.height=9}

p <- DomesticCMAPCommodityFlows[Move.Type=="Out"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Tonnage,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Tonnage",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```

### Value Out

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="Out"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Value,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Value",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```


### Ton-miles Out

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="Out"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Tonmiles,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Ton-miles",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```

Domestic Commodity Flow Tonmiles {.tabset .tabset-fade}
----------------------------------------------------------------

### Tonnage Within

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="Within"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Value,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Tonnage",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```

### Value Within

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="Within"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Value,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Value",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```


### Ton-miles Within

```{r,echo=FALSE,fig.height=9}
p <- DomesticCMAPCommodityFlows[Move.Type=="Within"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x))))+geom_bar(aes(y=Tonmiles,fill=Table),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Ton-miles",x="Commodity")+guides(fill=guide_legend("Table"))+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))

ggplotly(p)
```





























































































Regional Flow Chart {data-navmenu="CMAP"}
================================================

Flows {data-height=550 .tabset .tabset-fade}
----------------------------

### Tonnage
```{r,echo=FALSE,fig.height=9}
DomesticCMAPRegionFlows <- CMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Origin.Region,Destination.Region,Mode.Domestic)]

ModelDomesticCMAPRegionFlows <- ModelCMAPFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Origin.Region,Destination.Region,Mode.Domestic)]

DomesticCMAPRegionFlows <- rbind(DomesticCMAPRegionFlows,ModelDomesticCMAPRegionFlows)
rm(ModelDomesticCMAPRegionFlows)

p <- DomesticCMAPRegionFlows[!is.na(Origin.Region)&!is.na(Destination.Region)] %>% ggplot(aes(x=Mode.Domestic,y=Tonnage))+geom_bar(aes(fill=Table),stat="identity",position="dodge")+facet_wrap(~Origin.Region+Destination.Region,nrow = 2,scales = "free_y")+theme_db+scale_fill_manual(values=makeMoreColors(2))+labs(x="Domestic Mode",y="Tonnage")

ggplotly(p)
```


### Value
```{r,echo=FALSE,fig.height=9}

p <- DomesticCMAPRegionFlows[!is.na(Origin.Region)&!is.na(Destination.Region)] %>% ggplot(aes(x=Mode.Domestic,y=Value))+geom_bar(aes(fill=Table),stat="identity",position="dodge")+facet_grid(Origin.Region~Destination.Region,scales = "free_y")+theme_db+scale_fill_manual(values=makeMoreColors(2))+labs(x="Domestic Mode",y="Value")

ggplotly(p)
```

### Ton-miles
```{r,echo=FALSE,fig.height=9}

p <- DomesticCMAPRegionFlows[!is.na(Origin.Region)&!is.na(Destination.Region)] %>% ggplot(aes(x=Mode.Domestic,y=Tonmiles))+geom_bar(aes(fill=Table),stat="identity",position="dodge")+facet_grid(Origin.Region~Destination.Region,scales = "free_y")+theme_db+scale_fill_manual(values=makeMoreColors(2))+labs(x="Domestic Mode",y="Ton-miles")

ggplotly(p)
```


Tables {data-navmenu="National"}
==================================================
### Summary Tables
```{r createTablesNational, echo=FALSE}
DomesticFlows <- Flows[Trade.Type=="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0),Table="FAF 2012"),by=.(Move.Type,Mode.Domestic)][order(Move.Type,-Tonnage)]

ModelDomesticFlows <- ModelFlows[Trade.Type=="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0),Table="Model"),by=.(Move.Type,Mode.Domestic)][order(Move.Type,-Tonnage)]

DomesticFlows <- rbind(DomesticFlows,ModelDomesticFlows)
rm(ModelDomesticFlows)


DomesticFlows.T <- dcast(DomesticFlows,Mode.Domestic~Move.Type+Table,value.var = "Tonnage")
DomesticFlows.V <- dcast(DomesticFlows,Mode.Domestic~Move.Type+Table,value.var = "Value")
DomesticFlows.TM <- dcast(DomesticFlows,Mode.Domestic~Move.Type+Table,value.var = "Tonmiles")

ImpExpDomesticFlows <-Flows[Trade.Type!="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0),Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Domestic)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpDomesticFlows.T <- dcast(ImpExpDomesticFlows,Mode.Domestic~Trade.Type+Move.Type+Table,value.var="Tonnage")
ImpExpDomesticFlows.V <- dcast(ImpExpDomesticFlows,Mode.Domestic~Trade.Type+Move.Type+Table,value.var="Value")
ImpExpDomesticFlows.TM <- dcast(ImpExpDomesticFlows,Mode.Domestic~Trade.Type+Move.Type+Table,value.var="Tonmiles")

ImpExpInternationalFlows <- Flows[Trade.Type!="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0),Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Foreign)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpInternationalFlows.T <- dcast(ImpExpInternationalFlows,Mode.Foreign~Trade.Type+Move.Type+Table,value.var="Tonnage")
ImpExpInternationalFlows.V <- dcast(ImpExpInternationalFlows,Mode.Foreign~Trade.Type+Move.Type+Table,value.var="Value")
ImpExpInternationalFlows.TM <- dcast(ImpExpInternationalFlows,Mode.Foreign~Trade.Type+Move.Type+Table,value.var="Tonmiles")

TotalFlowsNational.T <- merge(merge(DomesticFlows.T,ImpExpDomesticFlows.T,by="Mode.Domestic"),ImpExpInternationalFlows.T,by.x="Mode.Domestic",by.y="Mode.Foreign")
TotalFlowsNational.V <- merge(merge(DomesticFlows.V,ImpExpDomesticFlows.V,by="Mode.Domestic"),ImpExpInternationalFlows.V,by.x="Mode.Domestic",by.y="Mode.Foreign")
TotalFlowsNational.TM <- merge(merge(DomesticFlows.TM,ImpExpDomesticFlows.TM,by="Mode.Domestic"),ImpExpInternationalFlows.TM,by.x="Mode.Domestic",by.y="Mode.Foreign")


countDomestic <- DomesticFlows[,.N,by=.(Move.Type,Table)]
countInternationalDomestic <- ImpExpDomesticFlows[,.N,by=.(Move.Type,Trade.Type,Table)]
countInternationalInternational <- ImpExpInternationalFlows[,.N,by=.(Move.Type,Trade.Type,Table)]

sketchNational <- with(tags,table(
    thead(
        tr(
            th(colspan=1,rowspan=4,"Mode"),
            th(colspan=countDomestic[,.N],rowspan=2, "Domesitc"),
            th(colspan=countInternationalDomestic[,.N], "Domestic"),
            th(colspan=countInternationalInternational[,.N], "International")
          ),
        tr(
            th(colspan=countInternationalDomestic[Trade.Type=="Import",.N], "Import"),
            th(colspan=countInternationalDomestic[Trade.Type=="Export",.N], "Export"),
            th(colspan=countInternationalInternational[Trade.Type=="Import",.N], "Import"),
            th(colspan=countInternationalInternational[Trade.Type=="Export",.N], "Export")
        ),
        tr(
            if((value <- countDomestic[Move.Type=="Within Zones",.N])>0) th(colspan=value, "Within Zones"),
            if((value <- countDomestic[Move.Type=="Between Zones",.N])>0) th(colspan=value, "Between Zones"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Within Zones",.N])>0) th(colspan=value, "Within Zones"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Between Zones",.N])>0) th(colspan=value, "Between Zones"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Within Zones",.N])>0) th(colspan=value, "Within Zones"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Between Zones",.N])>0) th(colspan=value, "Between Zones"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Within Zones",.N])>0) th(colspan=value, "Within Zones"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Between Zones",.N])>0) th(colspan=value, "Between Zones"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Within Zones",.N])>0) th(colspan=value, "Within Zones"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Between Zones",.N])>0) th(colspan=value, "Between Zones")
        ),
        tr(
          if((value <- countDomestic[Move.Type=="Within Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countDomestic[Move.Type=="Within Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countDomestic[Move.Type=="Between Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countDomestic[Move.Type=="Between Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Within Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Within Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Between Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Import" & Move.Type=="Between Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Within Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Within Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Between Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalDomestic[Trade.Type=="Export" & Move.Type=="Between Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
          if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Within Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Within Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Between Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Import" & Move.Type=="Between Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Within Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Within Zones" & Table=="Model",.N])>0) th(colspan=value, "Model"),
            if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Between Zones" & Table=="FAF 2012",.N])>0) th(colspan=value, "FAF 2012"),
          if((value <- countInternationalInternational[Trade.Type=="Export" & Move.Type=="Between Zones" & Table=="Model",.N])>0) th(colspan=value, "Model")
        )
        )))

datatable(TotalFlowsNational.T,container=sketchNational,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(TotalFlowsNational.T),currency="",digits=0) %>% formatStyle(columns=2:ncol(TotalFlowsNational.T),backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.T[,2:ncol(TotalFlowsNational.T)]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.T[,2:ncol(TotalFlowsNational.T)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") #%>% formatStyle(columns=4:7,backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.T[,4:7]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.T[,4:7])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") %>% formatStyle(columns=8:11,backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.T[,8:11]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.T[,8:11])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")



```


### Value

```{r,echo=FALSE}
datatable(TotalFlowsNational.V,container=sketchNational,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(TotalFlowsNational.V),digits=0) %>% formatStyle(columns=2:ncol(TotalFlowsNational.V),backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.V[,2:ncol(TotalFlowsNational.V)]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.V[,2:ncol(TotalFlowsNational.V)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") #%>% formatStyle(columns=4:7,backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.V[,4:7]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.V[,4:7])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") %>% formatStyle(columns=8:11,backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.V[,8:11]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.V[,8:11])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```


### Tonmiles

```{r,echo=FALSE}
datatable(TotalFlowsNational.TM,container=sketchNational,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(TotalFlowsNational.TM),currency="",digits=0) %>% formatStyle(columns=2:ncol(TotalFlowsNational.TM),backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.TM[,2:ncol(TotalFlowsNational.TM)]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.TM[,2:ncol(TotalFlowsNational.TM)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") #%>% formatStyle(columns=4:7,backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.TM[,4:7]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.TM[,4:7])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center") %>% formatStyle(columns=8:11,backgroundColor=styleInterval(sort(unlist(TotalFlowsNational.TM[,8:11]))[-1],createCSSColors(sort(unlist(TotalFlowsNational.TM[,8:11])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```






Tables by Commodity {data-navmenu="National" data-orientation=rows}
===============================================

Tonnage Table {data-height=1600 .tabset .tabset-fade}
-------------------------------------------------
### Tonnage
```{r createTablesCommodity, echo=FALSE}

# Domestic Portion
DomesticCommodityFlows <- Flows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Move.Type,Mode.Domestic,SCTG)][order(Move.Type,-Tonnage)]

DomesticCommodityFlowsTotal <- Flows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Move.Type="Total",Table="FAF 2012"),by=.(Mode.Domestic,SCTG)][order(Move.Type,-Tonnage)]

DomesticCommodityFlows <- rbind(DomesticCommodityFlows,DomesticCommodityFlowsTotal)
rm(DomesticCommodityFlowsTotal)

ModelDomesticCommodityFlows <- ModelFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Move.Type,Mode.Domestic,Commodity_SCTG)][order(Move.Type,-Tonnage)]

ModelDomesticCommodityFlowsTotal <- ModelFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Move.Type="Total",Table="Model"),by=.(Mode.Domestic,Commodity_SCTG)][order(Move.Type,-Tonnage)]

ModelDomesticCommodityFlows <- rbind(ModelDomesticCommodityFlows,ModelDomesticCommodityFlowsTotal)
rm(ModelDomesticCommodityFlowsTotal)

setnames(ModelDomesticCommodityFlows,old="Commodity_SCTG",new="SCTG")
DomesticCommodityFlows <- rbind(DomesticCommodityFlows,ModelDomesticCommodityFlows)
rm(ModelDomesticCommodityFlows)

DomesticCommodityFlows <- DomesticCommodityFlows[,Move.Type:=relevel(factor(Move.Type),ref="Within Zones")] # To reorder dcast output

DomesticCommodityFlows.T <- dcast(DomesticCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Move.Type+Table,value.var = "Tonnage")
DomesticCommodityFlows.V <- dcast(DomesticCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Move.Type+Table,value.var = "Value")
DomesticCommodityFlows.TM <- dcast(DomesticCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Move.Type+Table,value.var = "Tonmiles")

# Domestic Portion of International Trade
ImpExpDomesticCommodityFlows <- Flows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Domestic,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpDomesticCommodityFlowsTotal <- Flows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012",Move.Type="Total"),by=.(Trade.Type,Mode.Domestic,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpDomesticCommodityFlows <- rbind(ImpExpDomesticCommodityFlows,ImpExpDomesticCommodityFlowsTotal)
rm(ImpExpDomesticCommodityFlowsTotal)

ImpExpDomesticCommodityFlows <- ImpExpDomesticCommodityFlows[,Move.Type:=relevel(factor(Move.Type),ref="Within Zones")] # To reorder dcast output

ImpExpDomesticCommodityFlows.T <- dcast(ImpExpDomesticCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Trade.Type+Move.Type+Table,value.var = "Tonnage")
ImpExpDomesticCommodityFlows.V <- dcast(ImpExpDomesticCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Trade.Type+Move.Type+Table,value.var = "Value")
ImpExpDomesticCommodityFlows.TM <- dcast(ImpExpDomesticCommodityFlows[Move.Type!="Total"],SCTG~Mode.Domestic+Trade.Type+Move.Type+Table,value.var = "Tonmiles")



# Foreign portion of International Trade
ImpExpInternationalCommodityFlows <- Flows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Trade.Type,Move.Type,Mode.Foreign,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpInternationalCommodityFlowsTotal <- Flows[Trade.Type!="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012",Move.Type="Total"),by=.(Trade.Type,Mode.Foreign,SCTG)][order(Trade.Type,Move.Type,-Tonnage)]

ImpExpInternationalCommodityFlows <- rbind(ImpExpInternationalCommodityFlows,ImpExpInternationalCommodityFlowsTotal)
rm(ImpExpInternationalCommodityFlowsTotal)

ImpExpInternationalCommodityFlows <- ImpExpInternationalCommodityFlows[,Move.Type:=relevel(factor(Move.Type),ref="Within Zones")] # To reorder dcast output

ImpExpInternationalCommodityFlows.T <- dcast(ImpExpInternationalCommodityFlows[Move.Type!="Total"],SCTG~Mode.Foreign+Trade.Type+Move.Type+Table,value.var = "Tonnage")
ImpExpInternationalCommodityFlows.V <- dcast(ImpExpInternationalCommodityFlows[Move.Type!="Total"],SCTG~Mode.Foreign+Trade.Type+Move.Type+Table,value.var = "Value")
ImpExpInternationalCommodityFlows.TM <- dcast(ImpExpInternationalCommodityFlows[Move.Type!="Total"],SCTG~Mode.Foreign+Trade.Type+Move.Type+Table,value.var = "Tonmiles")


countMode <-  DomesticCommodityFlows[Move.Type!="Total",.N,by=.(Mode.Domestic,Move.Type,Table)]
sketchDomesticCommodity <- with(tags,table(
    thead(
        tr(
            th(colspan=1,rowspan=3,"SCTG"),
            if((value <- countMode[Mode.Domestic=="Truck",.N])>0) th(colspan=value ,"Truck"),
            if((value <- countMode[Mode.Domestic=="Rail",.N])>0)th(colspan=value ,"Rail"),
            if((value <- countMode[Mode.Domestic=="Water",.N])>0)th(colspan=value ,"Water"),
            if((value <- countMode[Mode.Domestic=="Air",.N])>0)th(colspan= value,"Air"),
            if((value <- countMode[Mode.Domestic=="Multiple",.N])>0)th(colspan= value,"Multiple"),
            if((value <- countMode[Mode.Domestic=="Pipeline",.N])>0)th(colspan= value,"Pipeline"),
            if((value <- countMode[Mode.Domestic=="Other",.N])>0)th(colspan=value ,"Other"),
            if((value <- countMode[Mode.Domestic=="None",.N])>0)th(colspan=value ,"None")
          ),
        tr(
            if((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Within Zones",.N])>0)th(colspan=value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Between Zones",.N])>0)th(colspan=value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Within Zones",.N])>0)th(colspan=value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Between Zones",.N])>0)th(colspan=value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Within Zones",.N])>0)th(colspan=value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Between Zones",.N])>0)th(colspan=value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Within Zones",.N])>0)th(colspan=value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Between Zones",.N])>0)th(colspan=value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Within Zones",.N])>0)th(colspan = value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Between Zones",.N])>0)th(colspan = value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Within Zones",.N])>0)th(colspan = value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Between Zones",.N])>0)th(colspan = value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="Other"&Move.Type=="Within Zones",.N])>0)th(colspan = value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="Other"&Move.Type=="Between Zones",.N])>0)th(colspan = value,"Between Zones"),
            if((value <- countMode[Mode.Domestic=="None"&Move.Type=="Within Zones",.N])>0)th(colspan = value,"Within Zones"),
            if((value <- countMode[Mode.Domestic=="None"&Move.Type=="Between Zones",.N])>0)th(colspan = value,"Between Zones")
        ),
        tr(
            if((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Truck"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Rail"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Water"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Air"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Multiple"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Pipeline"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Other"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Other"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="Other"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="Other"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="None"&Move.Type=="Within Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="None"&Move.Type=="Within Zones"&Table=="Model",.N])>0)th(colspan = value,"Model"),
            if((value <- countMode[Mode.Domestic=="None"&Move.Type=="Between Zones"&Table=="FAF 2012",.N])>0)th(colspan = value,"FAF 2012"),
            if((value <- countMode[Mode.Domestic=="None"&Move.Type=="Between Zones"&Table=="Model",.N])>0)th(colspan = value,"Model")
        )
        )))

datatable(DomesticCommodityFlows.T,container=sketchDomesticCommodity,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(DomesticCommodityFlows.T),currency="",digits=0) %>% formatStyle(columns=2:ncol(DomesticCommodityFlows.T),backgroundColor=styleInterval(sort(unlist(DomesticCommodityFlows.T[,2:ncol(DomesticCommodityFlows.T)]))[-1],createCSSColors(sort(unlist(DomesticCommodityFlows.T[,2:ncol(DomesticCommodityFlows.T)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")

```


### Value

```{r, echo=FALSE}
datatable(DomesticCommodityFlows.V,container=sketchDomesticCommodity,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(DomesticCommodityFlows.V),digits=0) %>% formatStyle(columns=2:ncol(DomesticCommodityFlows.V),backgroundColor=styleInterval(sort(unlist(DomesticCommodityFlows.V[,2:ncol(DomesticCommodityFlows.V)]))[-1],createCSSColors(sort(unlist(DomesticCommodityFlows.V[,2:ncol(DomesticCommodityFlows.V)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```

### Ton-miles

```{r,echo=FALSE}
datatable(DomesticCommodityFlows.TM,container=sketchDomesticCommodity,rownames=FALSE,extensions = 'FixedColumns',
             options = list(sDom  = '<"top">lrt<"bottom">ip',
                            fixedColumns = TRUE,
                            autowidth = TRUE,
                            bPaginate = FALSE,
                            bFilter = FALSE,
                            bInfo = FALSE,
                            columnDefs = list(list(width = '20%')),
                            searching=FALSE,
                            paging=FALSE)) %>% formatCurrency(2:ncol(DomesticCommodityFlows.TM),currency="",digits=0) %>% formatStyle(columns=2:ncol(DomesticCommodityFlows.TM),backgroundColor=styleInterval(sort(unlist(DomesticCommodityFlows.TM[,2:ncol(DomesticCommodityFlows.TM)]))[-1],createCSSColors(sort(unlist(DomesticCommodityFlows.TM[,2:ncol(DomesticCommodityFlows.TM)])),"white","orange")),backgroundSize="90% 80%",backgroundRepeat="no-repeat",backgroundPosition="center")
```




Total Flow Chart {data-navmenu="National"}
==================================


































Domestic Flows
------------------------

### Domestic Flows Tonnage

```{r comparisonPlotNationalTonnage, echo=FALSE}
# DomestiFlows <- Flows[Trade.Type=="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0)),by=.(Move.Type,Mode.Domestic)][order(Move.Type,-Tonnage)]

p <- DomesticFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonnage,fill=Table))+geom_bar(stat = "identity")+labs(x="Mode",y="Tonnage")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+scale_fill_manual(values=makeMoreColors(2))

ggplotly(p)
```

### Domestic Flows Value

```{r comparisonPlotNationalValue, echo=FALSE}

p <- DomesticFlows %>% ggplot(aes(x=Mode.Domestic,y=Value,fill=Table))+geom_bar(stat = "identity")+labs(x="Mode",y="Value")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+scale_fill_manual(values=makeMoreColors(2))

ggplotly(p)
```

### Domestic Flows Ton-miles

```{r comparisonPlotNationalTonmiles, echo=FALSE}

p <- DomesticFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonmiles,fill=Table))+geom_bar(stat = "identity")+labs(x="Mode",y="Ton-miles")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+scale_fill_manual(values=makeMoreColors(2))

ggplotly(p)
```

International Flows
--------------------------
### International Flows Tonnage

```{r comparisonPlotNationalDomesticTonnage, echo=FALSE}
ImpExpDomesticFlows <- Flows[Trade.Type!="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0)),by=.(Move.Type,Mode.Domestic,Mode.Foreign)][order(Move.Type,-Tonnage)]

p <- ImpExpDomesticFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonnage,fill=Mode.Foreign))+geom_bar(stat = "sum")+labs(x="Mode",y="Tonnage")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+guides(fill=guide_legend("Foreign Mode"))+scale_fill_manual(values=modeColors2)

ggplotly(p)
```

### International Flows Value

```{r comparisonPlotNationalDomesticValue, echo=FALSE}

p <- ImpExpDomesticFlows %>% ggplot(aes(x=Mode.Domestic,y=Value,fill=Mode.Foreign))+geom_bar(stat = "sum")+labs(x="Mode",y="Value")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+guides(fill=guide_legend("Foreign Mode"))+scale_fill_manual(values=modeColors2)

ggplotly(p)
```

### International Flows Ton-miles

```{r comparisonPlotNationalDomesticTonmiles, echo=FALSE}

p <- ImpExpDomesticFlows %>% ggplot(aes(x=Mode.Domestic,y=Tonmiles,fill=Mode.Foreign))+geom_bar(stat = "sum")+labs(x="Mode",y="Ton-miles")+facet_grid(Move.Type~.,scales = "free_y",switch = "y")+theme_db+scale_y_continuous(position = "right")+guides(fill=guide_legend("Foreign Mode"))+scale_fill_manual(values=modeColors2)

ggplotly(p)
```
























Commodity Flow Charts {data-navmenu="National"}
================================================

Domestic Commodity Flow Tonnage {.tabset .tabset-fade}
-------------------------------------------------------------

### Commodity Flows Within Zones
```{r,echo=FALSE, include=FALSE}
# DomesticCommodityFlows <- Flows[Trade.Type=="Domestic",.(Tonnage=comma(sum(Tons)/1000,digits=0),Tonmiles=comma(sum(Tonmiles)/1000000,digits = 0),Value=comma(sum(Value)/1000000,digits = 0)),by=.(SCTG,Mode.Domestic,Move.Type)][order(SCTG,Move.Type,Mode.Domestic)]

DomesticCommodityFlows <- merge(DomesticCommodityFlows,latestSCTGCodes,by="SCTG",all.x=TRUE,all.y=FALSE)
DomesticCommodityFlows[,SCTGLabels:=paste(SCTG,Label)]

```

```{r,echo=FALSE,fig.height=9}
p <- DomesticCommodityFlows[Move.Type=="Within Zones"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x)),fill=Table))+geom_bar(aes(y=Tonnage),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Tonnage",x="Commodity")+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))



ggplotly(p)
```

### Commodity Flows Between Zones

```{r,echo=FALSE,fig.height=9}
p <- DomesticCommodityFlows[Move.Type=="Between Zones"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x)),fill=Table))+geom_bar(aes(y=Tonnage),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Tonnage",x="Commodity")+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))



ggplotly(p)
```












Domestic Commodity Flow Value {.tabset .tabset-fade}
-------------------------------------------------------------

### Commodity Flows Within Zones

```{r,echo=FALSE,fig.height=9}
p <- DomesticCommodityFlows[Move.Type=="Within Zones"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x)),fill=Table))+geom_bar(aes(y=Value),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Value",x="Commodity")+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))



ggplotly(p)
```

### Commodity Flows Between Zones

```{r,echo=FALSE,fig.height=9}
p <- DomesticCommodityFlows[Move.Type=="Between Zones"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x)),fill=Table))+geom_bar(aes(y=Value),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Value",x="Commodity")+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))



ggplotly(p)
```


Domestic Commodity Flow Value {.tabset .tabset-fade}
-------------------------------------------------------------

### Commodity Flows Within Zones

```{r,echo=FALSE,fig.height=9}
p <- DomesticCommodityFlows[Move.Type=="Within Zones"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x)),fill=Table))+geom_bar(aes(y=Tonmiles),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Ton-miles",x="Commodity")+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))



ggplotly(p)
```

### Commodity Flows Between Zones

```{r,echo=FALSE,fig.height=9}
p <- DomesticCommodityFlows[Move.Type=="Between Zones"] %>% ggplot(aes(x=reorder(SCTGLabels,SCTG,function(x) unique(x)),fill=Table))+geom_bar(aes(y=Tonmiles),stat="identity",position="dodge") + scale_fill_manual(values=makeMoreColors(2)) +scale_y_continuous(limits=c(0,NA))+ labs(y="Ton-miles",x="Commodity")+facet_grid(.~Mode.Domestic,scales = "free_x")+theme_db+coord_flip()+theme(axis.text.x=element_text(angle=90))



ggplotly(p)
```









































































































Regional Flow Chart {data-navmenu="National"}
===================================================

Flows {data-height=550 .tabset .tabset-fade}
----------------------------

### Tonnage
```{r,echo=FALSE,fig.height=9}
DomesticRegionFlows <- Flows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="FAF 2012"),by=.(Origin.Region,Destination.Region,Mode.Domestic)]

ModelDomesticRegionFlows <- ModelFlows[Trade.Type=="Domestic",.(Tonnage=sum(Tons)/1000,Tonmiles=sum(Tonmiles)/1000000,Value=sum(Value)/1000000,Table="Model"),by=.(Origin.Region,Destination.Region,Mode.Domestic)]

DomesticRegionFlows <- rbind(DomesticRegionFlows,ModelDomesticRegionFlows)
rm(ModelDomesticRegionFlows)

p <- DomesticRegionFlows[!is.na(Origin.Region)&!is.na(Destination.Region)] %>% ggplot(aes(x=Mode.Domestic,y=Tonnage))+geom_bar(aes(fill=Table),stat="identity",position="dodge")+facet_grid(Origin.Region~Destination.Region,scales = "free_y")+theme_db+scale_fill_manual(values=makeMoreColors(2))+labs(x="Domestic Mode",y="Tonnage")

ggplotly(p)
```


### Value
```{r,echo=FALSE,fig.height=9}

p <- DomesticRegionFlows[!is.na(Origin.Region)&!is.na(Destination.Region)] %>% ggplot(aes(x=Mode.Domestic,y=Value))+geom_bar(aes(fill=Table),stat="identity",position="dodge")+facet_grid(Origin.Region~Destination.Region,scales = "free_y")+theme_db+scale_fill_manual(values=makeMoreColors(2))+labs(x="Domestic Mode",y="Value")

ggplotly(p)
```

### Ton-miles
```{r,echo=FALSE,fig.height=9}

p <- DomesticRegionFlows[!is.na(Origin.Region)&!is.na(Destination.Region)] %>% ggplot(aes(x=Mode.Domestic,y=Tonmiles))+geom_bar(aes(fill=Table),stat="identity",position="dodge")+facet_grid(Origin.Region~Destination.Region,scales = "free_y")+theme_db+scale_fill_manual(values=makeMoreColors(2))+labs(x="Domestic Mode",y="Ton-miles")

ggplotly(p)
```